#!/bin/sh
### filename: dmenu_run

# 处理 -h/--help 帮助参数
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    cat << EOF
dmenu_run - 基于 dmenu 的应用启动器，支持自定义参数和脚本编辑

用法: dmenu_run [选项]

脚本特有选项:
  -h, --help      显示本帮助信息并退出
  -rewrite        用编辑器打开脚本自身进行修改（优先 vim，其次 nano）

dmenu 核心选项（传递给 dmenu 程序）:
  行为选项:
    -b                菜单显示在屏幕底部（默认：顶部）
    -f                快速模式：读取输入前捕获键盘（减少延迟）
    -i                大小写不敏感匹配（默认启用）
    -c                窗口居中显示（需 DMENU_CENTER_PATCH 补丁支持）
    -v                打印 dmenu 版本信息并退出

  布局选项:
    -l <行数>         垂直显示指定行数的项目（默认：水平列表）
    -p <提示文本>     在输入框前显示提示（例：-p '搜索应用：'）

  外观选项:
    -fn <字体>        使用指定字体（例：-fn 'monospace:size=10'）
    -nb <颜色>        普通状态背景色（例：-nb '#222222'）
    -nf <颜色>        普通状态文本色（例：-nf '#ffffff'）
    -sb <颜色>        选中项背景色（例：-sb '#0055ff'）
    -sf <颜色>        选中项文本色（例：-sf '#ffffff'）

  位置选项:
    -m <显示器ID>     在指定显示器显示（0=第一个显示器，默认当前活动显示器）
    -w <窗口ID>       将菜单嵌入指定窗口（而非顶级窗口）

示例:
  dmenu_run -b -l 10 -p "启动应用："          # 底部显示10行菜单，带提示文本
  dmenu_run -fn 'sans:size=12' -nb '#1a1a1a'  # 自定义字体和背景色
  dmenu_run -rewrite                          # 编辑本脚本
EOF
    exit 0
fi

# 核心功能：处理 -rewrite 标志（打开脚本编辑）
if [ "$1" = "-rewrite" ]; then
    # 检测编辑器：优先 vim，其次 nano，无则报错
    if command -v vim >/dev/null 2>&1; then
        EDITOR="vim"
    elif command -v nano >/dev/null 2>&1; then
        EDITOR="nano"
    else
        echo "错误：未找到 vim 或 nano 编辑器，请先安装其中一个。"
        exit 1
    fi

    # 打开当前脚本（$0 即 dmenu_run 自身路径）进行编辑
    echo "正在用 $EDITOR 打开 dmenu_run 源码..."
    $EDITOR "$0"
    exit 0  # 编辑完成后退出，不执行后续菜单逻辑
fi

# 原始功能：调用 dmenu_path 生成菜单，传递所有参数给 dmenu（保留默认 -i 大小写不敏感）
# 示例用法：dmenu_run -b -l 10 -p "搜索应用：" （传递 -b 底部显示、-l 10行、-p 提示）
dmenu_path | dmenu -c -i "$@" | ${SHELL:-"/bin/sh"} &
